﻿USE master
GO

IF EXISTS (SELECT * FROM sysdatabases WHERE name = 'ManagerEmployees') DROP DATABASE ManagerEmployees
GO

CREATE DATABASE ManagerEmployees
GO

USE ManagerEmployees
GO



-- Place --------------------------------------------------------------------------------

-- Tỉnh thành
IF EXISTS (SELECT * FROM sys.tables WHERE name = 'Provinces') DROP TABLE Provinces
GO
CREATE TABLE Provinces
(
	ProvID								INT IDENTITY(1, 1) PRIMARY KEY,
	NameOfProvince						NVARCHAR(200) NULL,
	StatusOfProvince					BIT NULL
)
GO

-- Quận, huyện
IF EXISTS (SELECT * FROM sys.tables WHERE name = 'Districts') DROP TABLE Districts
GO
CREATE TABLE Districts
(
	DistID							INT IDENTITY(1, 1) PRIMARY KEY,
	NameOfDist						NVARCHAR(200) NULL,
	StatusDist						BIT NULL,

	ProvID							INT NOT NULL,
	CONSTRAINT FK_Provinces_Districts_ID FOREIGN KEY (ProvID) REFERENCES Provinces(ProvID)
)
GO

-- Xã, phường
IF EXISTS (SELECT * FROM sys.tables WHERE name = 'Communes') DROP TABLE Communes
GO
CREATE TABLE Communes
(
	ComID								INT IDENTITY(1, 1) PRIMARY KEY,
	NameOfComm							NVARCHAR(200) NULL,
	StatusOfComm						BIT NULL,

	DistID								INT NOT NULL,
	CONSTRAINT FK_Districts_Communes_ID FOREIGN KEY (DistID) REFERENCES Districts(DistID)
)
GO



-- Organizations Cơ quan tổ chức ------------------------------------------------------------------------------
IF EXISTS (SELECT * FROM sys.tables WHERE name = 'Organizations') DROP TABLE Organizations
GO
CREATE TABLE Organizations
(
	OrgID								INT IDENTITY(1, 1) PRIMARY KEY,
	CodeOfOgran							NVARCHAR(200) NULL,
	NameOfOrgan							NVARCHAR(200) NULL,
	Descriptons							NTEXT NULL,
	OrgStatus							BIT NULL,

	ComID								INT NOT NULL,
	CONSTRAINT FK_Organizations_Communes_ID FOREIGN KEY (ComID) REFERENCES Communes(ComID)
)
GO

-- Departments Phòng ban ------------------------------------------------------------------------------
IF EXISTS (SELECT * FROM sys.tables WHERE name = 'Departments') DROP TABLE Departments
GO
CREATE TABLE Departments
(
	DepID								INT IDENTITY(1, 1) PRIMARY KEY,
	CodeOfDep							NVARCHAR(200) NULL,
	NameOfDep							NVARCHAR(200) NULL,
	Descriptons							NTEXT NULL,
	StatusOfDep							BIT NULL,

	OrgID								INT NOT NULL,
	CONSTRAINT FK_Departments_Organizations_ID FOREIGN KEY (OrgID) REFERENCES Organizations(OrgID)
)
GO


-- TypeOfTrainnings Hình thức đào tạo --------------------------------------------------
IF EXISTS (SELECT * FROM sys.tables WHERE name = 'TypeOfTrainnings') DROP TABLE TypeOfTrainnings
GO
CREATE TABLE TypeOfTrainnings
(
	TrainID									INT IDENTITY(1, 1) PRIMARY KEY,
	NameOfTrain								NVARCHAR(200) NULL,			-- Cính quy, nhà nước, chuyên tu, bồi dưỡng
	Descriptons								NTEXT NULL,
	StatusOfTrain							BIT NULL
)
GO




-- Postions Chức vụ, chức danh ------------------------------------------------------------------------------
IF EXISTS (SELECT * FROM sys.tables WHERE name = 'Postions') DROP TABLE Postions
GO
CREATE TABLE Postions
(
	PosID									INT IDENTITY(1, 1) PRIMARY KEY,
	CodePost								NVARCHAR(200) NULL,
	NameOfPost								NVARCHAR(200) NULL,		-- Giám đốc, trưởng phòng, chủ tịch, nhân viên
	Descriptons								NTEXT NULL,
	StatusOfPost							BIT NULL
)
GO

-- Qualifications Trình độ chuyên môn--------------------------------------------------
IF EXISTS (SELECT * FROM sys.tables WHERE name = 'Qualifications') DROP TABLE Qualifications
GO
CREATE TABLE Qualifications
(
	QuaID									INT IDENTITY(1, 1) PRIMARY KEY,
	CodeOfQua								NVARCHAR(200) NULL,			-- TSKH, Tiến sỷ, thạc sỹ, cử nhân, cao đẳng, kỹ sư ....
	NameOfQua								NVARCHAR(200) NULL,
	Descriptons								NTEXT NULL,
	StatusOfQua								BIT NULL
)
GO

-- TypeOfInformations Trình độ tin học --------------------------------------------------
IF EXISTS (SELECT * FROM sys.tables WHERE name = 'TypeOfInformations') DROP TABLE TypeOfInformations
GO
CREATE TABLE TypeOfInformations
(
	InforID									INT IDENTITY(1, 1) PRIMARY KEY,
	NameOfInfor								NVARCHAR(200) NULL,		-- Trình độ A, B, C ..
	Descriptons								NTEXT NULL,
	StatusOfInfor							BIT NULL
)
GO

-- TypeOfLanguages Trình độ ngoại ngữ --------------------------------------------------
IF EXISTS (SELECT * FROM sys.tables WHERE name = 'TypeOfLanguages') DROP TABLE TypeOfLanguages
GO
CREATE TABLE TypeOfLanguages
(
	LanguageID								INT IDENTITY(1, 1) PRIMARY KEY,
	NameOfLangs								NVARCHAR(200) NULL,		-- Tên ngoại ngữ + Trình độ A, B, C ..
	Descriptons								NTEXT NULL,
	StatusOfLangs							BIT NULL
)
GO


-- StateOfManagements Quản lý nhà nước --------------------------------------------------
IF EXISTS (SELECT * FROM sys.tables WHERE name = 'StateOfManagements') DROP TABLE StateOfManagements
GO
CREATE TABLE StateOfManagements
(
	StateID									INT IDENTITY(1, 1) PRIMARY KEY,
	NameOfState								NVARCHAR(200) NULL,			-- Chuyên viên cao cấp, chuyên viên chính, chuyên viên, cán sự ....
	Descriptons								NTEXT NULL,
	StatusOfState							BIT NULL
)
GO


-- PoliticalOfTheories Lý luận chính trị --------------------------------------------------
IF EXISTS (SELECT * FROM sys.tables WHERE name = 'PoliticalOfTheories') DROP TABLE PoliticalOfTheories
GO
CREATE TABLE PoliticalOfTheories
(
	PoliID									INT IDENTITY(1, 1) PRIMARY KEY,
	NameOfPoli								NVARCHAR(200) NULL,			-- Cao cấp, trung cấp, sơ cấp, tương đương
	Descriptons								NTEXT NULL,
	StatusOfPoli							BIT NULL
)
GO



-- Adminstrastions --------------------------------------------------------------------------------
IF EXISTS (SELECT * FROM sys.tables WHERE name = 'Adminstrastions') DROP TABLE Adminstrastions
GO
CREATE TABLE Adminstrastions
(
	AdminID								INT IDENTITY(1, 1) PRIMARY KEY,
	Username							VARCHAR(200) NULL,
	[Password]							VARCHAR(200) NULL,
	FullOfName							NVARCHAR(200) NULL,
	LastLogined							DATETIME NULL,
	StatusOfAdmin						BIT NULL
)
GO



-- Employees --------------------------------------------------------------------------------
IF EXISTS (SELECT * FROM sys.tables WHERE name = 'Employees') DROP TABLE Employees
GO
CREATE TABLE Employees
(
	EmpID							INT IDENTITY(1, 1) PRIMARY KEY,
	Code							VARCHAR(100) UNIQUE NOT NULL,		-- Số hiệu cán bộ, công chức
	AvatarUrl						NVARCHAR(200) NULL,
	LastName						NVARCHAR(100) NULL,
	FirstName						NVARCHAR(100) NULL,
	NameOther						NVARCHAR(100) NULL,		-- Biệt Danh
	Gender							BIT NULL,				-- Giới tính
	Email							VARCHAR(50) NULL,		--
	Telephone						VARCHAR(50) NULL,
	DateOfBirth						DATETIME NULL,			-- Ngày sinh
	PlaceOfBirth					NVARCHAR(500) NULL,		-- Nơi sinh
	HomeTown						NVARCHAR(500) NULL,		-- Quê quán
	HouseHold						NVARCHAR(500) NULL,		-- Hộ khẩu, nơi đăng ký hộ khẩu thường chú
	CurrentAddress					NVARCHAR(500) NULL,		-- Nơi ở hiện nay

	JobCurrent						NVARCHAR(500) NULL,		-- Nghề nghiệp khi được tuyển dụng  mục 10
	DateOfRecruitment				DATETIME NULL,			-- Ngày tuyển dụng
	OrganOfRecruitment				NVARCHAR(500) NULL,		-- Cơ quan tuyển dụng ,mục 11
	TaskIsAssigned					NVARCHAR(500) NULL,		-- Công việc chính được giao mục 13

	PosID							INT NULL,				-- Chức vụ hiện tại
	CONSTRAINT FK_Postions_Employees_ID FOREIGN KEY (PosID) REFERENCES Postions(PosID),

					


	Ethnic							NVARCHAR(100) NULL,		-- Dân tộc
	Religion						NVARCHAR(100) NULL,		-- Tôn giáo
	StatusOfEmp						BIT NULL,

	DepManagerID					INT NULL,				-- Cơ quan quản lý
	CONSTRAINT FK_DepartmentsManager_Employees_ID FOREIGN KEY (DepManagerID) REFERENCES Departments(DepID),

	DepUsingID							INT NULL,			-- Cơ quan làm việc, sử dụng
	CONSTRAINT FK_DepartmentsUsing_Employees_ID FOREIGN KEY (DepUsingID) REFERENCES Departments(DepID)
)
GO


-- Profiles------------------------------------------------------------------------------
IF EXISTS (SELECT * FROM sys.tables WHERE name = 'Profiles') DROP TABLE Profiles
GO
CREATE TABLE Profilies
(
	ProID							INT IDENTITY(1, 1) PRIMARY KEY,
	EmpID							INT NOT NULL,
	CONSTRAINT FK_Profilies_Employees_ID FOREIGN KEY (EmpID) REFERENCES Employees(EmpID),

	CommunistPartyOfDate			DATETIME NULL,				-- Ngày vào đảng
	CommunistPartyOfFormally		DATETIME NULL,				-- Ngày vào đảng chính thức
	UnionsOfDate					DATETIME NULL,				-- Ngày vào đoàn
	JoinTheArmy						DATETIME NULL,				-- Ngày nhập ngũ
	Demobilized						DATETIME NULL,				-- Ngày xuất ngũ
	HighestOfRank					NVARCHAR(500) NULL,			-- Quân hàm cao nhất 
	HighestOfHonors					NVARCHAR(500) NULL,			-- Danh hiệu phong tặng cao nhất

	ForteOfWork						NVARCHAR(500) NULL,			-- Sở trường công việc, công tác
	Commendation					NVARCHAR(500) NULL,			-- Khen thưởng, năm
	Disciplined						NVARCHAR(500) NULL,			-- Kỹ luật
	StateOfHealth					NVARCHAR(100) NULL,			-- Tình trạng sức khỏe
	Height							FLOAT NULL,					-- Chiều cao
	[Weight]						FLOAT NULL,					-- Cân năng
	BloodOfGroup					NVARCHAR(50) NULL,			-- Nhosm mau
	WarInvalids						NVARCHAR(50) NULL,			-- Thương binh
	PolicyOfFamily					NVARCHAR(50) NULL,			-- Gia đình chính sách

	IdentityCards					NVARCHAR(50) NULL,			-- Số Chứng minh thư
	IdentityCardsOfDate				DATETIME NULL,				-- Ngày cấp chứng minh thư
	PlaceOfCard						NVARCHAR(50) NULL,			-- Nơi cấp
	NumberOfInsurance				NVARCHAR(50) NULL,			-- Số sổ bảo hiểm

	Descriptions					NTEXT NULL,					-- Mô tả, mục 29
	ReviewedAndEvaluation			NTEXT NULL					-- Nhận xét đánh giá, mục 32
)
GO



-- EducationsForEmps Trình độ học vấn (Từ mục 15.1 - 15.6) -----------------------------------------------------------------------------
IF EXISTS (SELECT * FROM sys.tables WHERE name = 'EducationsForEmps') DROP TABLE EducationsForEmps
GO
CREATE TABLE EducationsForEmps
(	
	EduID							INT IDENTITY(1, 1) PRIMARY KEY,
	GeneralLevel					NVARCHAR(500) NULL,		-- Trình độ phổ thông

	QuaID							INT	NOT NULL,		-- Trình độ chuyên môn
	CONSTRAINT FK_Qualifications_EmployeesQualifications_ID FOREIGN KEY (QuaID) REFERENCES Qualifications(QuaID),

	PoliID							INT	NOT NULL,		-- Lý luận Chính trị
	CONSTRAINT FK_PoliID_EducationsForEmps_ID FOREIGN KEY (PoliID) REFERENCES PoliticalOfTheories(PoliID),

	StateID							INT NOT NULL,		-- Quản lí nhà nước
	CONSTRAINT FK_StateID_EducationsForEmps_ID FOREIGN KEY (StateID) REFERENCES StateOfManagements(StateID),

	LanguageID							INT NOT NULL,		-- Trình độ ngoại ngữ
	CONSTRAINT FK_Languages_EducationsForEmps_ID FOREIGN KEY (LanguageID) REFERENCES TypeOfLanguages(LanguageID),

	InforID							INT NOT NULL,		-- Trình độ tin học
	CONSTRAINT FK_EmployeesInfor_EducationsForEmps_ID FOREIGN KEY (InforID) REFERENCES TypeOfInformations(InforID),

	EmpID							INT NOT NULL,		-- Của nhân viên nào
	CONSTRAINT FK_Employees_EducationsForEmps_ID FOREIGN KEY (EmpID) REFERENCES Employees(EmpID),

	UpdateForDate					DATETIME NOT NULL,				-- Ngày cập nhật trình độ học vấn
	StatusOfEmpEdus					BIT NULL,						-- Trạng thái đang tồn tại hay k?
)
GO



-- TrainingFosterings  Đào tạo bồi dưỡng mục 27 -----------------------------------------------------------------------------
IF EXISTS (SELECT * FROM sys.tables WHERE name = 'TrainingFosterings') DROP TABLE TrainingFosterings
GO
CREATE TABLE TrainingFosterings
(
	TraFosID							INT IDENTITY(1, 1) PRIMARY KEY,
	EmpID								INT NOT NULL,
	CONSTRAINT FK_Employees_TrainingFosterings_ID FOREIGN KEY (EmpID) REFERENCES Employees(EmpID),

	NameSchoolTrain						NVARCHAR(200) NULL,				-- Tên trường đào tạo bồi dưỡng
	Specialized							NVARCHAR(200) NULL,				-- Chuyên ngành

	StartOfDate							DATETIME NULL,					-- Ngày bắt đầu
	EndOfDate							DATETIME NULL,					-- Ngày kết thúc

	TrainID								INT NOT NULL,					-- Hình thức đào tạo
	CONSTRAINT FK_TypeOfTrainning_TrainingFosterings_ID FOREIGN KEY (TrainID) REFERENCES TypeOfTrainnings(TrainID),

	QuaID								INT	NOT NULL,		-- Trình độ chuyên môn, Chứng chỉ bằng cấp được dào tạo
	CONSTRAINT FK_TypeOfTrainning_EmployeesQualifications_ID FOREIGN KEY (QuaID) REFERENCES Qualifications(QuaID),

	StatusOfTrain						BIT NULL						-- Trạng thái done or undone
)
GO



-- FamilyRelationships  Mối quan hệ gia đình mục 30 -----------------------------------------------------------------------------
IF EXISTS (SELECT * FROM sys.tables WHERE name = 'FamilyRelationships') DROP TABLE FamilyRelationships
GO
CREATE TABLE FamilyRelationships
(
	FaReID								INT IDENTITY(1, 1) PRIMARY KEY,
	EmpID								INT NOT NULL,
	CONSTRAINT FK_Employees_FamilyRelationships_ID FOREIGN KEY (EmpID) REFERENCES Employees(EmpID),

	TypeRelation						BIT NULL,						-- Loại quan hệ nội or ngoại

	NameOfRelations						NVARCHAR(200) NULL,				-- Tên mối quan hệ
	FullOfName							NVARCHAR(200) NULL,				-- Tên đầy đủ

	YearOfBirth							DATETIME NULL,					-- Năm sinh
	HomeTown							NVARCHAR(200) NULL,				-- Quê quán
	NamOfJob							NVARCHAR(200) NULL,				-- Nghề Nghiệp
	PostionsName						NVARCHAR(200) NULL,				-- Chức danh chức vụ
	PlaceOfWork							NVARCHAR(200) NULL,				-- Đơn vị công tác
	CurrentAddress						NVARCHAR(500) NULL,				-- Nơi ở hiện nay
	MemberOfOrganzations				NVARCHAR(500) NULL,				-- Tên tổ chức xã hội tham ra
	StatusOfMemberFamily				BIT NULL						-- Trạng thái done or undone
)
GO

















-- Delay
-- SalaryLevels Nghạch công chức --------------------------------------------------
IF EXISTS (SELECT * FROM sys.tables WHERE name = 'SalaryLevels') DROP TABLE SalaryLevels
GO
CREATE TABLE SalaryLevels
(
	SaLevID									INT IDENTITY(1, 1) PRIMARY KEY,
	NameOfSalary							NVARCHAR(200) NULL,						-- Nghạch công chức,. viên chức
	Code									NVARCHAR(200) NULL,						-- Mã Ngạch
	LevelSalary								VARCHAR(100) NULL,						-- Bậc lương
	NumberSalary							VARCHAR(100) NULL,						-- Hệ số lương
	Descriptons								NTEXT NULL,
	StatusOfLevel							BIT NULL
)
GO



-- EmployeesSalaryLevels -----------------------------------------------------------------------------
IF EXISTS (SELECT * FROM sys.tables WHERE name = 'EmployeesSalaryLevels') DROP TABLE EmployeesSalaryLevels
GO
CREATE TABLE EmployeesSalaryLevels
(
	EmpSalaryID						INT IDENTITY(1, 1) PRIMARY KEY,
	EmpID							INT NOT NULL,
	SaLevID							INT NOT NULL,
	CONSTRAINT FK_Employees_EmployeesSalaryLevels_ID FOREIGN KEY (EmpID) REFERENCES Employees(EmpID),
	CONSTRAINT FK_SalaryLevels_EmployeesSalaryLevels_ID FOREIGN KEY (SaLevID) REFERENCES SalaryLevels(SaLevID),

	CodeEmpChangeWork				VARCHAR(100) NULL,		-- Mã của công tác, mã thay đổi

	AllowancesPostion				FLOAT NULL,				-- Khoản phụ cấp chức vụ
	AllowancesOther					FLOAT NULL,				-- Các khoản phụ khác

	StartOfSalary					DATETIME NULL,			-- Ngày bắt đầu nhận lương mới, ngày hưởng
	EndOfWork						DATETIME NULL,			-- Ngày kết thúc
)
GO

USE ManagerEmployees
GO

INSERT INTO Adminstrastions(Username, [Password], FullOfName) VALUES('admin', 'e10adc3949ba59abbe56e057f20f883e', 'A Đờ Min')
